home *** CD-ROM | disk | FTP | other *** search
- ;-------------------------------------------
- ; PACK-ROUTINE
- ;
- ; ES = Register to source-segment
- ; FS = Register to target-segment
- ; Both segments always start at offset '0'
- ;-------------------------------------------
- pack_it: xor si,si
- xor di,di
-
- mov cl,129
-
- p_x3: mov al,[es:si]
- mov ah,[es:si+1]
- cmp al,ah
- jne p_x1
- inc cl
- cmp cl,255
- je p_p1
- p_x5: inc si
- cmp si,32*2000
- jne p_x3
-
- mov [fs:di],cl
- inc di
- mov [fs:di],al
- inc di
- mov [byte fs:di],129
- inc di
- mov [fs:di],ah
- inc di
-
- mov [ds:text_length],di
-
- ret
-
- p_p1: dec cl
- jmp p_x2
-
- p_x1: cmp cl,129
- je p_x4
- p_x2: mov [fs:di],cl
- inc di
- mov [fs:di],al
- inc di
- mov cl,129
- jmp p_x5
-
- p_x4: mov ah,al
- and ah,10000000b
- cmp ah,128
- jne p_x6
- mov [fs:di],cl
- inc di
- p_x6: mov [fs:di],al
- inc di
- mov cl,129
- jmp p_x5
- ;-----------------------------------------------------
-